import ResizeObserver from 'resize-observer-polyfill';

const isServer = typeof window === 'undefined';

const resizeHandler = function(entries) {
	for (let entry of entries) {
		const listeners = entry.target.__resizeListeners__ || [];
		if (listeners.length) {
			listeners.forEach(fn => {
				fn();
			});
		}
	}
};

/* eslint-disable */
export const addResizeListener = function(element, fn) {
    if (isServer) return;
    if (!element.__resizeListeners__) {
        element.__resizeListeners__ = [];
        element.__ro__ = new ResizeObserver(resizeHandler);
        element.__ro__.observe(element);
    }
    element.__resizeListeners__.push(fn);
};

/* eslint-disable */
export const removeResizeListener = function(element, fn) {
    if (!element || !element.__resizeListeners__) return;
    element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);
    if (!element.__resizeListeners__.length) {
        element.__ro__.disconnect();
    }
};

function extend(to, _from) {
    for (let key in _from) {
      to[key] = _from[key];
    }
    return to;
};
  
export function toObject(arr) {
    var res = {};
    for (let i = 0; i < arr.length; i++) {
      if (arr[i]) {
        extend(res, arr[i]);
      }
    }
    return res;
};